package com.ctsi.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ctsi.common.util.Search;
import com.ctsi.core.common.entity.LoginUser;
import com.ctsi.system.entity.Org;
import com.ctsi.system.vo.OrgResVO;

import java.util.List;

/**
 * <p>
 * 系统组织机构表 服务类
 * </p>
 *
 * @author wang xiao xiang
 */
public interface IOrgService extends IService<Org> {

	/**
	 * 分页业务方法
	 *
	 * @param search 搜索参数
	 * @param org    组织机构
	 * @return IPage
	 */
	IPage<Org> listPage(Org org, Search search);


	/**
	 * 根据数据范围类型获取当前登录用户的数据范围ID集合
	 *
	 * @param dataScopeType 数据范围类型（1全部数据 2本部门及以下数据 3本部门数据 4仅本人数据）
	 * @param orgId         组织机构ID
	 * @return 数据范围ID集合
	 */
	List<Long> getDataScopeListByDataScopeType(Integer dataScopeType, Long orgId);

	/**
	 * 系统组织机构树
	 *
	 * @param user   用户信息
	 * @param search 查询对象
	 * @return 系统组织机构树
	 */
	List<OrgResVO> tree(LoginUser user, Search search);

	/**
	 * 系统组织机构列表
	 *
	 * @param user   用户信息
	 * @param org    组织机构对象，获取pid
	 * @param search 查询对象，获取数据权限
	 * @return 系统组织机构列表
	 */
	List<Org> list(LoginUser user, Org org, Search search);

	/**
	 * 保存组织机构
	 *
	 * @param org 组织机构对象
	 * @return 是否成功
	 */
	boolean setOrg(Org org);

	/**
	 * 根据节点id获取所有子节点id集合，包含自己
	 *
	 * @param id 父ID
	 * @return ID集合列表
	 */
	List<Long> getChildIdListWithSelfById(Long id);

	/**
	 * 查询机构是否存在用户
	 *
	 * @param orgId 机构ID
	 * @return 结果 true 存在 false 不存在
	 */
	boolean checkOrgExistUser(Long orgId);
}
